package br.rfpm.service;

import java.io.Serializable;
import java.util.List;

import br.rfpm.dao.GenericDao;

/**
 * Classe abstrata que implementa os métodos comuns da camada de serviço.
 * 
 *
 */
public abstract class AbstractService<T, PK extends Serializable> implements GenericService<T, PK> {
	
	protected abstract GenericDao<T, PK> getDao();
	
	public T consultarPorId(PK pk) {
		return getDao().consultar(pk);
	}

	public T carregar(PK pk) {
		return getDao().carregar(pk);
	}

	public T inserir(T entidade) {
		return getDao().inserir(entidade);
	}
	
	public T salvarOuEditar(T entidade) {
		return getDao().salvarOuEditar(entidade);
	}

	public T alterar(T entidade) {
		return getDao().editar(entidade);
	}

	public void excluir(T entidade) {
		getDao().excluir(entidade);
	}

	public List<T> listar() {
		return getDao().listar();
	}
	
	public List<T> listar(String orderByColumn, boolean asc) {
		return getDao().listar(orderByColumn, asc);
	}
	
	public List<T> listar(int offset, int maxResults) {
		return listar(offset, maxResults);
	}
	
	public List<T> listar(int offset, int maxResults, String orderByColumn, boolean asc) {
		return getDao().listar(offset, maxResults, orderByColumn, asc);
	}
	
	public List<T> listar(T entity) {
		return getDao().listar(entity);
	}
	
	public List<T> listar(T entity, String orderByColumn, boolean asc) {
		return getDao().listar(entity, orderByColumn, asc);
	}
	
	public List<T> listar(T entity, int offset, int maxResults) {
		return getDao().listar(entity, offset, maxResults);
	}
	
	public List<T> listar(T entity, int offset, int maxResults, String orderByColumn, boolean asc) {
		return getDao().listar(entity, offset, maxResults, orderByColumn, asc);
	}
	
	public Integer count() {
		return getDao().count();
	}
	
	public Integer count(T entity) {
		return getDao().count(entity);
	}

}
